package com.hzw.saas.api.user;

import java.util.List;

import com.hzw.saas.api.user.bo.UserInfoLogBO;

/**
 * 用户属性历史记录服务
 *
 * @author zzl
 * @since 05/27/2021
 */
public interface IUserInfoLogService {

    /**
     * 检查属性与属性值是否存在
     *
     * @param pkey  属性
     * @param value 属性值
     * @return true or false
     */
    boolean existLog(String pkey, String value);

    /**
     * 检查用户的属性和属性值是否存在
     *
     * @param userId 用户ID
     * @param pkey   属性
     * @param value  属性值
     * @return true or false
     */
    boolean existLog(String userId, String pkey, String value);

    /**
     * 检查属性和属性值是否存在，排除特定的用户
     *
     * @param excludedUserId 排除的用户ID
     * @param pkey           属性
     * @param value          属性值
     * @return true or false
     */
    boolean existLogExclude(String excludedUserId, String pkey, String value);

    /**
     * 获取用户属性历史记录
     *
     * @param userId 用户ID
     * @param pkey   属性
     * @param value  属性值
     * @return 用户属性历史记录
     */
    UserInfoLogBO getLog(String userId, String pkey, String value);

    /**
     * 根据属性和属性值获取相关记录列表
     *
     * @param pkey  属性
     * @param value 属性值
     * @return list
     */
    List<UserInfoLogBO> listLogsByKey(String pkey, String value);

    /**
     * 获取用户某属性的记录列表
     *
     * @param userId 用户ID
     * @param pkey   属性
     * @return list
     */
    List<UserInfoLogBO> listLogsByUser(String userId, String pkey);

    /**
     * 获取用户所有的属性记录列表
     *
     * @param userId 用户ID
     * @return list
     */
    List<UserInfoLogBO> listLogsByUser(String userId);

    /**
     * 增加用户属性记录
     *
     * @param log2Add log to add
     * @return log added
     */
    UserInfoLogBO addLog(UserInfoLogBO log2Add);

    /**
     * 批量增加用户属性记录
     *
     * @param logs2Add logs to add
     * @return logs added
     */
    List<UserInfoLogBO> addLogs(List<UserInfoLogBO> logs2Add);

    /**
     * 记录用户属性失效
     * 只会更新disableTime为空的属性
     *
     * @param userId 用户id
     * @param pkey   属性
     * @param value  属性值
     * @return true or false
     */
    boolean disableLog(String userId, String pkey, String value);

    /**
     * 记录用户属性失效
     * 只会更新disableTime为空的属性
     *
     * @param userId 用户ID
     * @param pkey   属性
     * @return true or false
     */
    boolean disableLog(String userId, String pkey);

}
